Инфраструктурно меня конкретно штормило раньше). Видимо, строить инфраструктуру (где-то в глубинах внутренних предпочтений) мне ничуть не менее интересно, чем рисёчить стратегии. Поштормило-поштормило, да подотпустило. Зато теперь у меня внутри нет никакой недосказанности вида «а что если своё попробовать написать», «а что если готовую вот эту специализированную взять» и прочих. Лучше жалеть о то, что сделал… и я делал)).
Сейчас самописная инфрастуктура. Не разраб, не кодер, не архитектор, но кой какие-то принципы усвоил – какие-то из своего опыта вынес, какие-то из курсов или ещё откуда. Соблюдение банальной IT гигиены на порядки облегчает жизнь. Пример: раньше мог запилить коннектор какой-нибудь, который корнями врастал в остальную часть инфраструктуры и чтобы заменить его на другой коннектор, если понадобится, приходится выкорчёвывать, а это долго, сложно и отличный повод запустить прокрастинационный цикл. А надо-то, банально, написать базовый класс и, много не надо, буквально несколькими с указанием сигнатур, дальше от этого класса наследоваться – всё.
Скачал с этих страниц списки американских акций
https://stockanalysis.com/list/nyse-stocks/
https://stockanalysis.com/list/nasdaq-stocks/
Запустил бэктестер, он последовательно проходит по бумагам — бэктестит одну, потом к следующей переходит и т.д., после каждой выводит результаты по бумаге и накопительные. Ну и я иногда поглядываю на процесс, смотрю нарисовались какие-то средние метрики после некоторого кол-во отбэктесченных бумаг, потом смотрю PF плюс минус стабильно стал падать и падать и падать, думаю ну кто его там этот рандом поймёт, но, подозрительно, в начале процесса бумаги выдавали стабильно 1.7-2.0 PF, а тут чёт всё больше вокруг 1.1-1.2 стали плясать и тоже подозрительно стабильно. В какой-то момент, смотрю, накопленные метрики начали расти опять, присмотрелся, средний бэктест опять ближе к 1.7-2.0. Ага, я положил список с NYSE тикерами, а справа прилепил Nasdaq и понимаю, что этот скачок был связан с переходом между биржами. Сомнений нет, это не просто рандом – пора идти смотреть, по какому принципу тикеры отсортированы, чувствую, не по алфавиту. Так и есть – по капитализации.
Не знаю, самый умный ли я или уже кто-то до меня до этого додумался.
Есть например, технологическая сингулярность, думаю ± все слышали про это понятие. В этом понятии сингулярность это про увеличение скорости… или ускорения? — Видимо, ускорения.
Применительно к трейдингу речь про уменьшения цикла жизни закономерностей и стратегий (стратегия — способ эксплуатации закономерности, но и закономерность во многом — порождение стратегии, ну только уже стратегия порождает другую закономерность). Процессы ускоряются, в след за технологиями да, сначала был медленный цикл жизни стратегии-закономерности когда всё руками, потом появились компы, потом компы стали ускоряться и ускоряться, потом появился ML.
https://smart-lab.ru/blog/929831.php
Здесь Александр постулирует что если грамотно ротировать стратегии, вкладывать в этот процесс достаточно усилий, то это можно делать бесконечно. С этим можно согласиться, но здесь не учитывается этот эффект ускорения. В какой-то момент можно отстать от этой гонки, а в какой-то момент, возможно, это всё как-то схлопнется.
Представим процесс создания и верификации стратегии как исследование, и сведём этот процесс к следующей упрощенной модели: цель исследования это вопрос, само исследование — процесс ответа на вопрос, результат исследования – ответ на вопрос.
Так вот часто, эти три компонента в модели А. Не согласованы, Б. Процесс согласования не проходит через сознательный уровень. Поясню:
(А) – Ну тут обычно всё просто: если ты задаёшь один вопрос, а отвечаешь как будто на другой вопрос, то и ответ в итоге не будет отвечать на поставленный вопрос. Или ближе к алго: если ты хочешь оценить робастность стратегии, а в процессе исследования делаешь что-то несусветное, твои выводы не скажут ничего про робастность. Например, я оцениваю робастность стратегии и хочу получить наилучшие параметры для торговли (вопрос), делаю оптимизацию на истории и отбираю ТОП1 прогонов, беру от него набор значений параметров (ответ).
(Б) – Многие тупо не отдают себе отчет что они делают, почему именно так, как процесс ответа на вопрос согласуется с вопросом, как ответ соответствует вопросу и т.д. Ну т.е. многие исследуют именно так, а не иначе потому «а вот я слышал, что это работает», «я пробовал, вроде сработало» или ещё почему-то. Не скажу, что более глубокий уровень осознанности в этом деле прям обязательный, если у тебя что-то работает (твой подход) – ну и отлично.
Но я люблю осознанность:
IS – in sample (оно же обучающая выборка), OOS — out of sample (оно же тестовая выборка). Ну или ближе к обычным алго – IS – там, где оптимизируешь стратегию, OOS – данные, которые стратегия ещё не видела.
Какое соотношение выборок лучше. Просто сейчас накапливаю некоторые данные (которые иным способом не получить), а любопытство оно же такое, что нельзя просто так взять и подождать 3 месяца и только тогда начать с данными работать, поэтому начал работать с данными чуть когда их было ещё совсем мало, потом продолжил когда их было просто мало, продолжил когда стало чуть побольше и т.д., сейчас уже вполне достаточно.
Из-за того, что несколько раз к данным подступался при разных объёмах этих самых данных, несколько выпятился наружу вопрос достаточности данных в целом и в частности вопрос соотношения IS/OOS в целом.
Когда данных совсем мало – без разницы как делить – не хватит ни чтобы обучить (терминология у меня ML’ная, но, по сути, без разницы, ML или классические алгоритмы) ни чтобы оценить.
Активно использую в алго ML модели. При обучении моделей тоже есть свои фишки и с точки зрения защиты от оверфиттинга и в целом. Поэтому часто обучаю по несколько моделей в одном скрипте. Это и параметры разные и участки данных разные и т.д.
Когда скрипты уже отлажены ты просто их гоняешь, оцениваешь результаты, принимаешь решения. Часто при этом в голове всплывают неотвеченные вопросы, одни помечаешь себе, другие нет. Одними из таких вопросов были: это модель хреновая или OOS неудачный для модели, или в целом неудачный, а есть для него удачная модель, а для удачной модели есть неудачные участки данных тоже? В общем если убрать за скобки ML – классическая тема про переоптимизацию про то, что рынок может благоприятствовать стратегии (а скорее целому классу стратегий), а может нет. Но как с этим у моделей обстоит. В общем до этого момента только фантазировал на эту тему, закрыть вопрос через исследование было не сложно, но как-то руки не доходили, а теперь дошли.
Что делал: условно, взял много данных, единое признаковое пространство, по-всякому нарезал данные таким образом чтобы разные модели обучались на разных участках данных и было так же сопоставимое с кол-вом моделей кол-во OOS участков. Убедился, что OOS в конкретной паре модель-OOS не участвовал в обучении данной модели и погнал тестить разные модели на разных OOS кусках.
Текущее экспериментальное направление рисеча в алго – графические паттерны. Формализовал и алгоритмизировал выявление нескольких паттернов. Они в таком сыром виде работают, но не космос. Чтобы было космосее формализовал и алгоритмизировал выделение фичей (они же параметры, они же метрики, свойства – как хотите) паттерна. Ну т.е. паттерн-то он паттерн, но конкретные матчи (кейсы) они же все разные, а чем они разные? – Вот в частности значениями этих фичей. По сути, я ушел на следующий уровень абстракции (сам паттерн – первый уровень, его характеристики – второй). Ну и чтобы работать со свойствами паттерна было удобней традиционно поверх небольшим слоем размазал ML.
Текущие сложности в этом направлении:
— В моей формализации долго (относительно) ищутся паттерны на окне (зависит от размера окна), поэтому, в частности, насобирать большую выборку для ML долго, а на небольшой, например, много фичей паттерна сразу не оценишь на профпригодность. Для торговли скорости приемлемые если не слишком малые ТФ и не слишком много тикеров одновременно.
Часто тут пишу про Wealth-Lab. Сейчас это значимая часть моей алго-инфраструктуры. Но ни разу даже картинки Велс-Лаба не показал)). Пришло время все исправить. Покажу новый велс и немного приподниму вуаль, защищающую мой подход и мой алгоритмический флоу (как тэщщу, где беру идеи, как оптимизирую, как выбираю значения параметров и т.д.).
Базовый флоу на Wealth-Lab 7.
Кодим стратегию.
В начале Initialize видно, как удобно организована работа с таймсериями в векторном стиле.
Можно и без кода стратегию запилить.